package com.demo.java.OD101_150.OD122;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【找终点】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145720758
 */
public class OdMain {
    private static void solve(String[] nums) {
        int stepOneMinValue = 1;  // 从数组的第一个位置开始跳跃
        int stepOneMaxValue = nums.length / 2;  // 最大可跳跃的步数是数组的一半
        int minStepValue = Integer.MAX_VALUE;  // 初始化最少步数为最大值
        int current = 0;  // 当前的位置
        int stepTmp = 0;  // 当前跳跃的步数

        // 从第一步开始计算
        for (int i = stepOneMinValue; i <= stepOneMaxValue; i++) {
            int targetValue = nums.length - 1;  // 目标位置是数组的最后一个位置
            current = i;  // 当前跳跃的位置
            stepTmp = 1;  // 初始化步数为1

            // 尝试跳跃直到目标位置
            while (current < targetValue) {
                current += Integer.parseInt(nums[current]);  // 从当前位置跳跃
                stepTmp++;  // 步数增加
                if (current == targetValue) {  // 若跳到了目标位置
                    minStepValue = Math.min(minStepValue, stepTmp);  // 更新最少步数
                    break;
                }
                if (current > targetValue) {  // 若超出了目标位置
                    stepTmp = 0;
                    current = 0;
                    break;
                }
            }
        }

        // 输出最少步数，如果不可达则输出 -1
        if (minStepValue <= nums.length) {
            System.out.println(minStepValue);
        } else {
            System.out.println(-1);
        }
    }

    public static void main(String[] args) {
        try {
            Scanner scan = new Scanner(System.in);
            // 读取输入，最大支持100个元素
            String[] nums = scan.nextLine().split(" ");
            if (nums.length <= 0 || nums.length > 100) {
                System.out.println("input error");
                return;
            }
            solve(nums);  // 调用解题方法
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}